package com.mars.admin.modules.post.service;

import com.mars.admin.modules.base.service.BaseService;
import com.mars.admin.modules.post.entity.Topic;
import com.mybatisflex.core.paginate.Page;

import java.util.List;

/**
 * 话题服务接口
 *
 * @author Mars
 * @version 1.0
 * @date 2025-01-07
 */
public interface ITopicService extends BaseService<Topic> {

    /**
     * 根据分类查询话题列表
     *
     * @param category 分类
     * @return 话题列表
     */
    List<Topic> getTopicsByCategory(String category);

    /**
     * 查询热门话题
     *
     * @param limit 限制数量
     * @return 热门话题列表
     */
    List<Topic> getHotTopics(Integer limit);

    /**
     * 查询官方话题
     *
     * @return 官方话题列表
     */
    List<Topic> getOfficialTopics();

    /**
     * 搜索话题
     *
     * @param keyword 关键词
     * @return 话题列表
     */
    List<Topic> searchTopics(String keyword);

    /**
     * 更新话题统计数据
     *
     * @param topicId 话题ID
     * @param postsCount 帖子数量增量
     * @param followersCount 关注数量增量
     * @return 是否成功
     */
    boolean updateTopicStats(Long topicId, Integer postsCount, Integer followersCount);

    /**
     * 创建话题
     *
     * @param topic 话题信息
     * @return 是否成功
     */
    boolean createTopic(Topic topic);

    /**
     * 更新话题
     *
     * @param topic 话题信息
     * @return 是否成功
     */
    boolean updateTopic(Topic topic);

    /**
     * 删除话题
     *
     * @param topicId 话题ID
     * @return 是否成功
     */
    boolean deleteTopic(Long topicId);

    /**
     * 设置话题热门状态
     *
     * @param topicId 话题ID
     * @param isHot 是否热门
     * @return 是否成功
     */
    boolean setTopicHot(Long topicId, Integer isHot);

    /**
     * 设置话题推荐状态
     *
     * @param topicId 话题ID
     * @param isOfficial 是否官方
     * @return 是否成功
     */
    boolean setTopicOfficial(Long topicId, Integer isOfficial);

    /**
     * 分页查询话题列表（带条件）
     *
     * @param page 分页参数
     * @param name 话题名称
     * @param category 话题分类
     * @param isHot 是否热门
     * @param isOfficial 是否官方
     * @param status 状态
     * @return 分页结果
     */
    Page<Topic> pageTopics(Page<Topic> page, String name, String category, Integer isHot, Integer isOfficial, Integer status);
}